using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Sinacor.Infra.UI.Common;
using Sinacor.Infra.UI.Security.Services;
using Sinacor.UI.Bovespa.Corretagem.Communication.Bovespa.Corretagem.TipoAplicacaoPolitica;

namespace Sinacor.UI.Bovespa.Corretagem.Communication
{
    /// <summary>
    /// Class - TipoAplicacaoPolitica
    /// </summary>
	public class TipoAplicacaoPolitica : BaseCommunication
    {

		#region Construtor

            public TipoAplicacaoPolitica(SessionInformation sessionInformation)
                : base(sessionInformation)
            {
            }

        #endregion

        #region AlterarTipoAplicacaoPolitica

            /// <summary>
            /// Alterar Tipo Aplicacao Politica
            /// </summary>
            /// <param name="tipoAplicacaoPolitica"></param>
		    public void AlterarTipoAplicacaoPolitica(Model.TipoAplicacaoPolitica tipoAplicacaoPolitica)
            {
                try
                {
                    ITipoAplicacaoPolitica _service = null;
                    Translator.ModelToDataContract.TipoAplicacaoPolitica translator = new Translator.ModelToDataContract.TipoAplicacaoPolitica();

                    using (ServiceInstance<ITipoAplicacaoPolitica> serviceInstance = new ServiceInstance<ITipoAplicacaoPolitica>())
                    {
                        _service = serviceInstance.TryGetInstance(this.Session);

                        _service.AlterarTipoAplicacaoPolitica(translator.ToTipoAplicacaoPoliticaRequest(tipoAplicacaoPolitica));    
                    }
                }
                catch (Exception ex)
                {
                    base.HandleFault(ex);
                }
		    }
    		 
	    #endregion

        #region ConsultarTiposAplicacoesPoliticas

            /// <summary>
            /// ConsultarTiposAplicacoesPoliticas
            /// </summary>
            /// <param name="model"></param>
            /// <returns></returns>
            public ModelCollection<Model.TipoAplicacaoPolitica> ConsultarTiposAplicacoesPoliticas(Model.Parameter.FiltroTipoAplicacaoPolitica model)
            {
                ModelCollection<Model.TipoAplicacaoPolitica> retornos = null;

                try
                {
                    ITipoAplicacaoPolitica _service = null;
                    Translator.ModelToDataContract.TipoAplicacaoPolitica translatorModelToDataContract = new Translator.ModelToDataContract.TipoAplicacaoPolitica();
                    Translator.DataContractToModel.TipoAplicacaoPolitica translatorDataContractToModel = new Translator.DataContractToModel.TipoAplicacaoPolitica();

                    using (ServiceInstance<ITipoAplicacaoPolitica> serviceInstance = new ServiceInstance<ITipoAplicacaoPolitica>())
                    {
                        _service = serviceInstance.TryGetInstance(this.Session);

                        List<TipoAplicacaoPoliticaResponse> responseListas = _service.ConsultarTipoAplicacaoPolitica(translatorModelToDataContract.ToFiltroTipoAplicacaoPoliticaRequest(model));

                        retornos = translatorDataContractToModel.ToTipoAplicacaoPolitica(responseListas);
                    }
                }
                catch (Exception ex)
                {
                    base.HandleFault(ex);
                }

                return retornos;                
            }
        
        #endregion

        #region ExcluirTipoAplicacaoPolitica

            /// <summary>
            /// ExcluirTipoAplicacaoPolitica
            /// </summary>
            /// <param name="filtroTipoAplicacaoPoliticaChave"></param>
            public void ExcluirTipoAplicacaoPolitica(Model.Parameter.FiltroTipoAplicacaoPoliticaChave filtroTipoAplicacaoPoliticaChave)
            {
                try
                {
                    ITipoAplicacaoPolitica _service = null;
                    Translator.ModelToDataContract.TipoAplicacaoPolitica translator = new Translator.ModelToDataContract.TipoAplicacaoPolitica();

                    using (ServiceInstance<ITipoAplicacaoPolitica> serviceInstance = new ServiceInstance<ITipoAplicacaoPolitica>())
                    {
                        _service = serviceInstance.TryGetInstance(this.Session);

                        _service.ExcluirTipoAplicacaoPolitica(translator.ToFiltroTipoAplicacaoPoliticaChaveRequest(filtroTipoAplicacaoPoliticaChave));
                    }
                }
                catch (Exception ex)
                {
                    base.HandleFault(ex);
                }
            }
        
        #endregion

        #region IncluirTipoAplicacaoPolitica

            /// <summary>
            /// IncluirTipoAplicacaoPolitica
            /// </summary>
            /// <param name="tipoAplicacaoPolitica"></param>
            public void IncluirTipoAplicacaoPolitica(Model.TipoAplicacaoPolitica tipoAplicacaoPolitica)
            {
                try
                {
                    ITipoAplicacaoPolitica _service = null;
                    Translator.ModelToDataContract.TipoAplicacaoPolitica translator = new Translator.ModelToDataContract.TipoAplicacaoPolitica();

                    using (ServiceInstance<ITipoAplicacaoPolitica> serviceInstance = new ServiceInstance<ITipoAplicacaoPolitica>())
                    {
                        _service = serviceInstance.TryGetInstance(this.Session);

                        _service.IncluirTipoAplicacaoPolitica(translator.ToTipoAplicacaoPoliticaRequest(tipoAplicacaoPolitica));
                    }
                }
                catch (Exception ex)
                {
                    base.HandleFault(ex);
                }
            }
        
        #endregion

	}
}